package com.starry.module.system.core.tenant.service;

import com.starry.core.common.domain.vo.PageVo;
import com.starry.module.system.api.tenant.domain.qo.SysTenantPageQo;
import com.starry.module.system.api.tenant.domain.qo.SysTenantQo;
import com.starry.module.system.api.tenant.domain.vo.SysTenantDtlVo;
import com.starry.module.system.api.tenant.domain.vo.SysTenantVo;

import java.util.Set;

/**
 * 系统租户-服务
 *
 * @author xiaoke
 */
public interface SysTenantService {

    /**
     * 分页查询所有数据
     *
     * @param pageQo 查询实体
     * @return 所有数据
     */
    PageVo<SysTenantVo> page(SysTenantPageQo pageQo);

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    SysTenantDtlVo getById(Long id);

    /**
     * 新增数据
     *
     * @param sysTenantQo 实体对象
     * @return 新增结果
     */
    Long save(SysTenantQo sysTenantQo);

    /**
     * 通过网址获取租户ID
     *
     * @param webSite 租户网站
     * @return 租户ID
     */
    Long getByWebSiteTenantId(String webSite);

    /**
     * 获取租户套餐的菜单编号
     *
     * @param tenantId 租户Id
     * @return 菜单编号集合
     */
    Set<Long> getTenantPackageMenuIds(Long tenantId);

    /**
     * 验证租户账号数量
     *
     * @param userCount 租户账号数量
     * @param tenantId  租户ID
     * @return true/false
     */
    boolean validateAccountCount(Long userCount, Long tenantId);

    /**
     * 修改数据
     *
     * @param sysTenantQo 实体对象
     */
    void updateById(SysTenantQo sysTenantQo);

    /**
     * 删除数据
     *
     * @param idList 主键集合
     */
    void removeByIds(Set<Long> idList);

    /**
     * 启用数据
     *
     * @param idList 主键集合
     */
    void enable(Set<Long> idList);

    /**
     * 禁用数据
     *
     * @param idList 主键集合
     */
    void disable(Set<Long> idList);

    /**
     * 验证租户是否可用
     */
    boolean validateTenant();
}

